%\begin{flushright}
%	\Huge\textbf{前言} \\
	%\zihao{0} 前言
%\end{flushright}

这本书将为提供关于C++17和C++20标准的细节，以及如何编译、链接和执行。还会介绍内存管理是如何工作的，关于内存管理问题的最佳实践，以及相关的类是如何实现的。还有，编译器如何优化代码，以及编译器在支持类继承、虚函数和模板方面的方法。 \par
并告诉读者如何使用内存管理、面向对象编程、并发和设计模式来创建实际的应用。 \par
读者将了解数据结构和算法的内部细节，了解如何衡量和比较它们，并针对问题选择最适合特定的方法。\par
本书将帮助读者将系统设计和设计模式融入到C++应用中。 \par
另外，还介绍了人工智能，包括使用C++编程语言进行机器学习的基础知识。 \par
最后，读者应该能使用高效的数据结构和算法，设计实际的架构、可扩展的C++应用程序。 \par

\hspace*{\fill} \\ %插入空行
\noindent\textbf{目标读者}\ \par
本书适合于探究语言和程序结构相关细节的C++开发人员，或者尝试深入研究程序的本质来提高自己专业知识体系结构的读者。还有，那些愿意使用C++17和C++20的新特性(高效数据结构和算法)的开发人员。 \par

\hspace*{\fill} \\ %插入空行
\noindent\textbf{章节概要}\ \par
\textsf{第1章}，\textit{构建C++应用}，
包括对C++的介绍，应用程序，以及最新的语言标准。本章还对C++涉及的主题进行了很好的概述，并介绍了代码编译、链接和执行。

\noindent\textbf{}\ \par
\textsf{第2章}，\textit{C++底层编程}，重点讨论C++的数据类型、数组、指针、指针寻址和操作，以及条件、循环、函数、函数指针和结构的底层细节。本章还介绍了结构体(struct)。

\noindent\textbf{}\ \par
\textsf{第3章}，\textit{面向对象编程}，深入研究类和对象的结构，以及编译器如何实现对象生存周期。在本章最后，读者将了解继承函数和虚函数的实现细节，以及C++中面向对象的内部细节。

\noindent\textbf{}\ \par
\textsf{第4章}，\textit{了解并设计模板}，介绍C++模板、模板函数示例、模板类、模板特化和模板元编程。特性和元编程将为C++带来魔法般的效果。

\noindent\textbf{}\ \par
\textsf{第5章}，\textit{内存管理和智能指针}， 深入研究内存的相关内容，包括分配和管理的细节，以及使用智能指针来避免内存泄漏。

\noindent\textbf{}\ \par
\textsf{第6章}，\textit{挖掘STL中的数据结构和算法}，介绍数据结构以及其STL实现。本章还包括数据结构的比较和与对其实现例程的讨论。

\noindent\textbf{}\ \par
\textsf{第7章}，\textit{函数式编程}，着重于函数式编程，这是一种不同的编程范式，允许读者关注代码的“函数式”结构，而不是“物理”结构。掌握函数式编程为开发人员提供了一种新技能，有助于提供更好的问题解决方案。

\noindent\textbf{}\ \par
\textsf{第8章}，\textit{并发和多线程}，如何利用并发性使程序运行得更快。当算法的高效实现遇到性能瓶颈时，并发就会有用武之地。

\noindent\textbf{}\ \par
\textsf{第9章}，\textit{设计并发式数据结构}，重点介绍如何利用数据结构和并发性，来设计基于锁和无锁的并发数据结构。

\noindent\textbf{}\ \par
\textsf{第10章}, \textit{设计实际程序}, 通过使用设计模式，将前面章节中获得的知识整合到设计健壮的实际应用程序中。本章还包括，通过设计Amazon的克隆版来理解和应用领域驱动设计。

\noindent\textbf{}\ \par
\textsf{第11章}，\textit{使用设计模式设计策略游戏}，通过使用设计模式和最佳实践，将前面章节中获得的知识整合到策略游戏中。

\noindent\textbf{}\ \par
\textsf{第12章}，\textit{网络和安全}，在C++中的网络编程和如何利用网络编程技能建立一个dropbox后端副本。本章还讨论了如何进行最佳实践。

\noindent\textbf{}\ \par
\textsf{第13章}，\textit{调试与测试}，着重于调试C++应用程序和最佳实践，以避免代码中的错误，应用静态代码分析减少程序中的问题，引入测试驱动开发和行为驱动开发。本章还讨论了行为驱动开发和TDD用例之间的区别。

\noindent\textbf{}\ \par
\textsf{第14章}，\textit{使用Qt开发图形界面}，介绍Qt库及其主要组件。本章还包括对Qt跨平台特性的理解进行了介绍，并通过构建一个简单的桌面客户端继续dropbox的例子。

\noindent\textbf{}\ \par
\textsf{第15章}，\textit{使用C++进行机器学习}，简要介绍了人工智能的概念和该领域的最新发展。本章还介绍了机器学习的相关知识，如回归分析和聚类，以及如何建立一个简单的神经网络。

\noindent\textbf{}\ \par
\textsf{第16章}，\textit{实现一个交互式搜索引擎}，应用前面所有章节的知识，设计一个高效的基于对话框的搜索引擎，可以通过询问(和学习)用户的相应问题来找到正确的文档。

\hspace*{\fill} \\ %插入空行
\noindent\textbf{书中程序的应用环境}\ \par
基本的C++经验包括熟悉内存管理、面向对象编程、基本的数据结构和算法，要能了解这些就最好了。如果你想要了解复杂程序是如何工作的，并且渴望理解编程概念的细节和c++应用程序设计的最佳实践，那么你绝对应该要阅读本书。 \par

\hspace*{\fill} \\ %插入空行
\begin{tabular}{|l|c|r|} %l(left)居左显示 r(right)居右显示 c居中显示
	\hline 
	\textbf{本书所需要的软件和硬件}&\textbf{所需操作系统}\\
	\hline  
	g++编译器&Ubuntu Linux最好\\
	\hline 
\end{tabular}

\noindent\textbf{}\ \par
您还需要在您的计算机上安装Qt。详情见相关章节。\par

写这本书的时候，并不是所有的C++编译器都支持C++20的新特性，可以考虑使用最新版本的编译器来测试本书介绍的新特性。 \par

\hspace*{\fill} \\ %插入空行
\noindent\textbf{下载示例源码} \par
您可以从您的帐户下载本书的示例代码文件\textsf{www.packt.com}. 如果在别处买到这本书，可以访问\textsf{www.packt.com/support}，进行注册后，文件会通过电子邮件直接发给你。 \par

你可以通过以下步骤下载代码文件: \par

\noindent\textbf{}\ \par
\begin{enumerate}
	\item 在\textsf{www.packt.com}登录或注册账号。
	\item 选择\textbf{SUPPORT}页面。
	\item 点击\textbf{Code Downloads \& Errata}。
	\item 在\textbf{Search}框中输入书名后，根据屏幕上的指示进行操作。
\end{enumerate}

\noindent\textbf{}\ \par
下载文件后，请确保您使用最新版本的解压包: \par

\begin{itemize}
	\item Windows下WinRAR/7-Zip
	\item Mac下Zipeg/iZip/UnRarX
	\item Linux下7-Zip/PeaZip
\end{itemize}

\hspace*{\fill} \\ %插入空行
\noindent\textbf{下载彩图}\ \par
我们还提供了一个PDF文件，其中有本书中使用的屏幕截图/图表的彩色图像。下载地址：
https://static.packt-cdn.com/downloads/9781838552657\_ColorImages.pdf \par

\hspace*{\fill} \\ %插入空行
\noindent\textbf{约定惯例}\ \par
本书中有许多文本约定。 \par
\textsf{CodeInText}: 表示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟url、用户输入和Twitter句柄。下面是一个例子:“前面的代码声明了两个带有预赋值的\textsf{readonly}属性。” \par

\noindent\textbf{}\ \par
\noindent 代码块样式如下： \par
		\textsf{Range book = 1..4}; \par
		\textsf{var res = Books[book];} \par
		\textsf{Console.WriteLine(\$\"\textbackslash tElement of array using Range: Books[{book}] => {Books[book]}");} \par

\noindent\textbf{}\ \par
\noindent 当我们希望提请您注意代码块的特定部分时，相关的行或项将以粗体显示: \par
		\textsf{private static \textbf{readonly} int num1=5;} \par
		\textsf{private static \textbf{readonly} int num2=6;} \par
	
\noindent\textbf{}\ \par
\noindent 任何命令行输入或输出都是这样写的:\par
		\textsf{\textbf{dotnet --info}} \par
		
\noindent\textbf{}\ \par
\textbf{Bold}: 指示一个新的术语，一个重要的词，或你在屏幕上看到的词。例如，菜单或对话框中的单词出现在这样的文本中。这里有一个例子:“\textbf{Select System info} from \textbf{Administration} panel”。
	
\includegraphics[width=0.05\textwidth]{images/warn}
表示警告或重要提示。
	
\includegraphics[width=0.05\textwidth]{images/tip}
表示提示和技巧。

\newpage
	